/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.srm.manejadores;

import co.srm.dao.JPAGenericDAO;
import co.srm.entidades.Cliente;
import co.srm.entidades.Empresa;
import co.srm.entidades.Prestamo;
import co.srm.entidades.Rol;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author TilZon
 */
public class ManejadorCliente {

    public static Cliente lastClienteInsert;//el ultimo id del
    private JPAGenericDAO<Cliente> daoCliente;

    public ManejadorCliente() {
        this.daoCliente = new JPAGenericDAO<Cliente>(Cliente.class);
    }

    public boolean crearCliente(String idStr, String identificacionStr, Date fechaRegistro, String nombre, String apellidos, String telefono, String celular, String direccion, String observaciones, boolean editar) {
        int identificacion;
        Long id = null;
        Date registro = null;
        List<Rol> permisos = null;
        Cliente cliente = null;
        SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
        try {
            identificacionStr=(identificacionStr.isEmpty()?"0":identificacionStr);
            identificacion = Integer.parseInt(identificacionStr);
            if (editar) {
                id = Long.parseLong(idStr);
            }

//            registro = formato.parse(fechaRegistro);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
//        if (contraseña.equals("nuevo_password")) {
//            Usuario consultado = daoUsuario.getById(id);
//            contraseña = consultado.getClave();
//            permisos = consultado.getRoles();
//        } else {
        permisos = new ArrayList<Rol>();
//        }
        try {
            cliente = new Cliente();
//            Long idRolDig = new Long(idRol);
//            Rol r = daoPermisos.getById(idRolDig);
//            permisos.add(r);
//            user.setRoles(r);
            /**
             * Datos de la persona
             */
            cliente.setIdentificacion(identificacion);
            cliente.setNombres(nombre);
            cliente.setApellidos(apellidos);
             String direc = (direccion.isEmpty()?"No Suministrada":direccion);
            cliente.setDireccion(direc);
            cliente.setTelefono(telefono);
            cliente.setCelular(celular);
            cliente.setFechaCreacion(fechaRegistro);

            /**
             * Datos del cliente
             */
            String observ = (observaciones.isEmpty()?"Sin Observaciones":observaciones);
            cliente.setObservacion(observ);


        } catch (Exception e) {
            e.printStackTrace();
        }



        boolean estado = daoCliente.save(cliente);
        if (estado) {
            List<Cliente> clientes = daoCliente.get("SELECT MAX(c) FROM Cliente c");
//            List<Prestamo> prestamos=new ArrayList<Prestamo>();
            Cliente c=clientes.get(0);
//            c.setPrestamos(prestamos);
            lastClienteInsert = c;
        }
        return estado;
    }

    public List<Cliente> consultarAllUsuarios() {
        List<Cliente> clientes = daoCliente.findAll();

        if (clientes != null) {
            return clientes;
        } else {
            return null;
        }


    }

    public Cliente consultarUsuarioById(String idStr) {
        Long id = null;
        Cliente c = null;
        try {
            id = new Long(idStr);
        } catch (Exception e) {
            return null;
        }

        c = daoCliente.getById(id);

        if (c != null) {
            return c;
        } else {
            return null;
        }
    }

    public Cliente consultarUsuarioByIdentificacion(String identificacionStr) {
        Cliente c = null;
        List<Cliente> clientes = null;
        String query = "SELECT c FROM Cliente c WHERE c.identificacion = p1";
        try {
            query=query.replace("p1", identificacionStr.trim());
            clientes = daoCliente.get(query);
        } catch (Exception e) {
            return null;
        }

        if (!clientes.isEmpty()) {
            c = clientes.get(0);
            return c;
        } else {
            return null;
        }
    }

     public boolean actualizarCliente(Cliente c) {
        boolean estado = daoCliente.save(c);
        return estado;
    }
}
